
package jiangjie1;
/*
Collcetion接口中声明的方法的测试:
向Collection接口的实现类的对象中添加对象obj时，要求obj所在类重写了equals()方法。
 */


import org.junit.Test;

import java.util.*;

/*
一.集合框架的概述
1.集合和数组都是对多个数据进行存储操作的结构，简称java容器
   说明:此时的存储主要是指内存层面的存储，不涉及到持久化的存储(.txt,.ipg,.avi,数据库中)
2.数组在存储多个数据方面的特点:
   2.1.一旦初始化以后，其长度就确定了。
   2.2.数组一旦定义好，其元素的类型也就确定了，我们也就只能操作指定类型的数据了。
          比如:String[] arr;int[] arr1;Object[] arr2;
3.数组在存储多个数据方面的缺点:
   3.1.一旦初始化以后，其长度就不可修改。
   3.2.数组中提供的方法非常有限，对于添加，删除，插入数据等操作，非常不变且效率不高
   3.3.获取数组中实际元素的个数的需求，数组没有现成的属性或方法可用
   3.4.数组存储数据的特点:有序，可重复。对于无序，不可重复的需求不能满足

二.集合框架
1.Collection接口:单列集合，用来存储一个一个的对象
   1.1.List接口:存储有序的，可重复的数据。---->“动态”数组
        (分为ArratList,LinkedList,Vector)
   1.2.Set接口:存储无序的，不可重复的数据。---->类似于数学中的“集合”
         (分为HashSet,LinkedHashSet,TreeSet)
2.Map接口:双列集合，用来存储一对(key,value)的数据。---->类似于数学中的“函数”
   (分为HashMap,LinkedHashMap,TreeMap,Hashtable,Properties)

三.Collection中的方法
      如下，共14个方法，都是Collection类中的抽象方法，用Collection的子类ArrayList类来紧进行演示

四.集合Collection中存储的如果是自定义类的对象，需要自定义类重写哪个方法？为什么？
      重写equals()方法。因为在Collection中有contains()/remove()/retainsAll()等方法涉及到自定义类对象之间的比较，因此要重写equals()方法。
      具体来讲:
      List:需要重写equals()方法，因为不仅Collection中有需要equals()的方法，在List中也有诸如 indexOf(Object obj)
      和lastIndexOf(Object obj)这样的需要对两个对象之间进行比较的方法，因此要重写equals()
      HashSet和LinkedHashSet:需要重写equals()方法和hashCode()方法
      TreeSet:需要自定义类实现comparable接口，并在接口中重写compareTo(Object obj)方法
                      需要自定义类实现comparator接口(通常使用生成一个匿名子类，并在匿名子类内部实现接口全部方法的方式
                      省略了写一个具体类实现接口的开销)，并在接口中重写compare(Object o1,Object o2)方法
 */
public class CollectionTest {
    @Test
    public void test1(){
        Collection collection=new ArrayList();

        //1.add(Object e):将元素e添加到集合collection中
        collection.add("AA");
        collection.add(123);//自动装箱
        collection.add(new Date());
        collection.add(new Person("Tom",12));

        //2.size():获取添加的元素的个数
        System.out.println(collection.size());//4

        //3.addAll(Collection collection1):将collection1集合中的元素添加到当前的集合中
        System.out.println(collection);//输出的时候调用的是集合中每个类的toString方法，如果没有重写则需要重写toString方法
        Collection collection1=new ArrayList();
        collection1.add(345);
        collection1.add("CC");
        collection.addAll(collection1);
        System.out.println(collection.size());//6
        System.out.println(collection);

        //4.clear():清空集合元素
        collection.clear();
        System.out.println(collection.size());//0
        System.out.println(collection);

        //5.isEmpty():判断当前集合是否为空
        System.out.println(collection.isEmpty());//true
        System.out.println(collection1.isEmpty());//false

    }

    @Test
    public void test2(){
        Collection collection=new ArrayList();
        collection.add("AA");
        collection.add(123);//自动装箱
        collection.add(456);
        collection.add(new Date());
        collection.add(new String("Tom"));
        collection.add(false);
//        Person person=new Person("Jerry",20);
//        collection.add(person);
        collection.add(new Person("Jerry",20));

        //6.contains(Object obj):判断当前集合中是否包含obj
        //我们在判断时会调用obj对象所在类的equals()方法
        boolean contains=collection.contains(123);
        System.out.println(contains);//true
        System.out.println(collection.contains(new String("Tom")));//true
//        System.out.println(collection.contains(p));//true
        System.out.println(collection.contains(new Person("Jerry",20)));//false--->true

        //7.containsAll(collection collection1):判断形参collection1中的所有元素是否都存在于当前集合中
        Collection collection1= Arrays.asList(123,456);
        Collection collection2= Arrays.asList(123,4567);
        System.out.println(collection.containsAll(collection1));//true
        System.out.println(collection.containsAll(collection2));//false
    }

    @Test
    public void test3(){
        Collection collection=new ArrayList();
        collection.add("AA");
        collection.add(123);//自动装箱
        collection.add(456);
        collection.add(new Date());
        collection.add(new String("Tom"));
        collection.add(false);

        //8.remove(Object obj):将当前集合中的obj元素移除，没有obj元素则不对当前集合进行操作
        System.out.println(collection.size());
        System.out.println(collection);
        collection.remove(123);
        System.out.println(collection.size());
        System.out.println(collection);
        collection.remove(4567);
        System.out.println(collection.size());
        System.out.println(collection);

        //9.removeAll(Collection collection1):求差集，即                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            从当前集合中移出collection1中的所有元素
        Collection collection1=new ArrayList();
        collection1.add("AA");
        collection1.add(456);
        collection1.add(false);
        collection.removeAll(collection1);
        System.out.println(collection.size());
        System.out.println(collection);
    }

    @Test
    public void test4(){
        Collection collection=new ArrayList();
        collection.add("AA");
        collection.add(123);//自动装箱
        collection.add(456);
        collection.add(new Date());
        collection.add(new String("Tom"));
        collection.add(false);

        //10.retainAll(Collection collection1):求交集，即获取当前集合和collection1集合的交集，并返回给当前集合
        Collection collection1=Arrays.asList(123,456,789);
        collection.retainAll(collection1);
        System.out.println(collection);

        //11.equals(Object obj):要想返回true，需要当前集合和形参集合的元素都相同
        Collection collection2=new ArrayList();
        collection.add("AA");
        collection.add(123);//自动装箱
        collection.add(456);
        collection.add(new Date());
        collection.add(new String("Tom"));
        collection.add(false);
        System.out.println(collection2.equals(collection1));

        //12.hashCode():返回当前对象的哈希值
        System.out.println(collection.hashCode());

        //13.集合---->数组:toArray()
        Object[] arr=collection.toArray();
        for(int i=0;i<arr.length;i++){
            System.out.println(arr[i]);
        }

        //拓展:数组--->集合:调用Arrays类中的静态方法asList()
        List<String> list=Arrays.asList(new String[]{"AA","BB","CC"});
        System.out.println(list);
        //注意:下面操作将int数组看成一个元素传入arr1中，使用包装类数组能避免这种情况
        //Arrays.asList中参数是Object类，因此用int数组不会把数组中的每个int型元素都自动装箱成包装类Integer
        //而是会把数组本身看作一个类(因为数组本来就是引用数据类型，是一个类)
        List arr1=Arrays.asList(new int[]{123,456});
        System.out.println(arr1.size());//1
        List arr2= Arrays.asList(new Integer[]{123,456});
        System.out.println(arr2.size());//2

        //14.iterator():返回Iterator接口的实例，用于遍历集合元素，放在jiangjie2中讲解


    }
}
